class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        //这个题目的解法就是使用长链表的长度减去短链表的长度，然后让长链表先走这个差值步，然后
        //两个链表在一起往前移动，当相等的那一刻就是相交的第一个节点
        ListNode* cur1 = headA;
        ListNode* cur2= headB;
        int len1 = 0;
        int len2 = 0;
        while(cur1!=nullptr)
        {
            len1++;
            cur1=cur1->next;
        }
        while(cur2!=nullptr)
        {
            len2++;
            cur2 = cur2->next;
        }
        if(len1>len2)
        {
            cur1 = headA;
            cur2 = headB;
        }
        else
        {
            cur1 = headB;
            cur2 = headA;
            int tmp = len1;
            len1 = len2;
            len2 = tmp;
        }
        //cur1指向长的那个链表
        int tmp = len1 - len2;
        while(tmp)
        {
            cur1 = cur1->next;
            tmp--;
        }
        while(cur1&&cur2)
        {
            if(cur1 == cur2)
            {
                return cur1;
            }
            else
            {
                cur1 = cur1->next;
                cur2 = cur2->next;
            }
        }
        //说明不存在相机的节点
        return nullptr;
    }
};